package daily.nov;

public class lc1578 {
    /*
    我的思路是：连续相同颜色为一组，留下组内最大值，将其余较小值相加。最后求和，返回结果。
    思路正确，但是被代码实现绕死了，由deepseek实现。
    其实目前的解答也看的一知半解。
     */
    public int minCost(String colors, int[] neededTime) {
        int totalTime = 0;
        int n = colors.length();

        int i = 0;
        while (i < n) {
            int j = i; // j用于遍历当前连续序列
            int currentMax = neededTime[i]; // 当前连续序列中的最大时间
            int currentSum = neededTime[i]; // 当前连续序列的总时间

            // 找到所有连续相同颜色的气球
            while (j + 1 < n && colors.charAt(j + 1) == colors.charAt(i)) {
                j++;
                currentMax = Math.max(currentMax, neededTime[j]);
                currentSum += neededTime[j];
            }

            // 如果连续序列长度 > 1，需要计算移除代价
            if (j > i) {
                totalTime += (currentSum - currentMax); // 总时间减去最大值
            }

            i = j + 1; // 移动到下一个不同颜色的序列
        }

        return totalTime;
    }

    public static void main(String[] args) {
        lc1578 lc = new lc1578();
        String colors1="abaac";
        int[] neededTime1={1,2,3,4,5};
        System.out.println(lc.minCost(colors1, neededTime1));
        String colors2="abc";
        int[] neededTime2={1,2,3};
        System.out.println(lc.minCost(colors2, neededTime2));
        String colors3="aabaa";
        int[] neededTime3={1,2,3,4,1};
        System.out.println(lc.minCost(colors3, neededTime3));
    }
}